package com.tedu.api.list;

import java.util.Collection;

/**测试：  ① 创建父类：Fruit--属性：name 名字 | 方法：获取名称 |构造器
         *       ②创建两个子类：Apple、Orange--构造器：传水果名
         *       创建类：TestJob   泛型 ? extends 父类 限定传入子类一定是继承父类操作
         *       约束---静态的方法printFruit()
         *       约束只能是继承父类的子类才可以使用
         *       单元测试：testE()测试--约束是否限制成功
         * 实际开发应用中，高级程序员制定!
         */


public class Fruit {
    private String name; //私有属性 name 水果名称

            public String getName() {  //获取名字
                return name;
            }

            public Fruit(String name) {//有参数构造器
                this.name = name;
            }
        }
//创建两个子类：Apple和Orange继承Fruit
class Apple extends Fruit{
    public Apple() { //Apple a=new Apple();  打印水果名称
        super("苹果");
    }
}
class Orange extends Fruit{
    public Orange() {
        super("橘子");
    }
}
//创建TestJob类---静态方法printFruit：添加约束：传入类型一定是父类的子类
class TestJob{               //  ?【任意类型】extends Fruit
                             //传入类型必须继承与Fruit父类
    public static void printFruit(Collection<? extends Fruit> fruits){
        //增强for循环：父类Fruit  名称
        for(Fruit fruit:fruits){//获取继承【Apple、Orange】与父类的功能
            //打印对应对象名称
            System.out.println(fruit.getName());
        }
    }
}

//测试：上界限定：一定继承Fruit【Pear不继承Fruit】
class Pear{

}